SPB Git

Repository Public

route.ts 1.7 KB 43 lines typescript

1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// /api/admin/mail/[id] — actions sur un courriel de SA boîte (lu/non-lu,3// archiver, corbeille, restaurer) ; un super admin peut aussi s'attribuer4// un message non routé. Jamais d'accès à la boîte d'un autre admin.5import { NextRequest, NextResponse } from "next/server";6import { getAdminSession } from "@/lib/comms/admin-auth";7import { findMail, canAccessMail, updateMail, MAIL_FOLDERS } from "@/lib/comms/mail";89export async function PATCH(10  req: NextRequest,11  { params }: { params: Promise<{ id: string }> },12) {13  const session = await getAdminSession();14  if (!session)15    return NextResponse.json({ error: "Non autorisé." }, { status: 401 });16  const id = Number((await params).id);17  const mail = Number.isInteger(id) ? findMail(id) : undefined;18  const superAdmin = session.roles.includes("super_admin");19  if (!mail || !canAccessMail(mail, session.id, superAdmin))20    return NextResponse.json({ error: "Message introuvable." }, { status: 404 });2122  const body = (await req.json().catch(() => null)) as {23    is_read?: boolean;24    folder?: string;25    claim?: boolean;26  } | null;27  if (!body)28    return NextResponse.json({ error: "Requête illisible." }, { status: 400 });2930  if (typeof body.is_read === "boolean")31    updateMail(mail.id, { is_read: body.is_read });32  if (typeof body.folder === "string") {33    if (!(body.folder in MAIL_FOLDERS))34      return NextResponse.json({ error: "Dossier inconnu." }, { status: 422 });35    updateMail(mail.id, { folder: body.folder });36  }37  // s'attribuer un message non routé (super admin)38  if (body.claim === true && mail.admin_id === null && superAdmin)39    updateMail(mail.id, { admin_id: session.id });4041  return NextResponse.json({ ok: true });42}43
Files main
Menu

Theme